package com.csx.base.design.behavior.strategy.example.exampleA;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.Optional;

/**
 * @author cuisongxu
 * @date 2022/9/29 12:21
 */
@Component
public class PayStrategyContext {

    @Autowired
    private PayStrategyFactory payStrategyFactory;

    public boolean payHandle(PayDTO payDTO) {
        Optional<PayStrategyEnum> payStrategyEnumOptional = Arrays.stream(PayStrategyEnum.class.getEnumConstants()).filter(e -> e.getCode().equals(payDTO.getType())).findAny();
        if(!payStrategyEnumOptional.isPresent()) {
            System.out.println("匹配不到具体的支付策略");
            return false;
        }

        PayStrategyEnum payStrategyEnum = payStrategyEnumOptional.get();
        PayStrategy payStrategy = payStrategyFactory.getPayStrategy(payStrategyEnum);

        // 进行payDto参数的处理...

        boolean pay = payStrategy.pay();

        // 支付后的记录处理..

        return true;

    }
}
